// ECMAScript 2017

const obj = {
    foo: 'value1',
    bar: 'value2'
}

// Ovject.values --------------------------------------------
// 返回obj中所有的值组成的数组
// console.log(Object.values(obj));

// Object.entries ==================================================
// 以数组的方式返回对象中的所有键值对
// console.log(Object.entries(obj));

// for (const [key, value] of Object.entries(obj)) {
//     console.log(key, value);
// }

// console.log(new Map(Object.entries(obj)));

// Object.getOwnPropertyDescriotors ----------------------------------
// 获取对象当中属性的完整描述信息
const p1 = {
    firstName: 'Lei',
    lastName: 'Wang',
    get fullName () {
        return this.firstName + ' ' + this.lastName
    }
}

// console.log(p1.fullName);

// const p2 = Object.assign({}, p1)
// p2.firstName = 'zce'
// console.log(p2);     // fullName: 'Lei Wang' 

// 处理 get  set 等
// const descriptors = Object.getOwnPropertyDescriptors(p1)
// // console.log(descriptors);
// const p2 = Object.defineProperties({}, descriptors)
// p2.firstName = 'zce'
// console.log(p2.fullName);   // zce Wang

// String.property.padStart / String.property.padEnd ------------------------------
// 字符串填充方法
const books = {
    html: 5,
    css: 16,
    javascript: 128
}

// for (const [name, count] of Object.entries(books)) {
//     console.log(name, count);
// }

// 用给定的字符串填充开始或末尾的位置 直到达到给定的字符数为止
// for (const [name, count] of Object.entries(books)) {
//     console.log(`${name.padEnd(16, '-')}|${count.toString().padStart(3, '0')}`);
// }

// 在函数参数中添加尾逗号 -------------------------------------------

// function foo (
//     bar,
//     baz,
// ) {

// }

// 结束末尾添加尾逗号 可以让源代码管理工具更精确判断代码改变位置
const arr = [ 
    100,
    200,
    300,
]


// 标准化了 Async函数 配合Await关键词 彻底解决了回调函数嵌套过深产生的问题 使得代码简洁易读